#ifndef ODDZIAL
#define ODDZIAL
#include <fstream>


class jednostka;
class wskje;
class oddzial
{	

public:	
	/////////////////////////////////przyjazni sie z operatorami
	friend bool operator==(const int i,const  oddzial & o);
	friend bool operator<(const int i, const oddzial & o);
	friend bool operator>(const int i, const oddzial & o);
	virtual int operator-=(jednostka * j);
	friend bool operator&=(const oddzial & p, const oddzial & o); //porownywanie | comparation
	friend bool operator==(const oddzial & p, const oddzial & o);
	friend bool operator<(const oddzial & p, const oddzial & o);
	friend bool operator>(const oddzial & p,const  oddzial & o);
	friend bool operator<<(const int i, const oddzial & o);
	friend bool operator>>(const int i,const  oddzial & o);
	friend bool operator<<(const oddzial & p, const oddzial & o);
	friend bool operator>>(const oddzial & p, const oddzial & o);
	friend bool operator+=(oddzial & p, jednostka * j);
	/////////////////////////////////operatory bedace funkcjami skladowymi
	int operator()(int ktory);
	void operator()(int ktory, const UnitDef * &ws);
	/////////////////////////////////czesci skladowe
	IAICallback *cb;    
    TTAICore *G;
	noli<jednostka*> czlonkowie;
	unsigned int metal;
	int typ;
	// Typy: 1=konstrukcyjny; 2=zwiadowcy; 3=mordulce; 4=huty



	/////////////////////////////////////////
	//oddzial(IAICallback * callb, TTAICore * ttai);
	oddzial();
	~oddzial();
	void aktWsk(int id);
	bool atakujcie(int co);
	bool atakujcie(float3 pos, float promien);
	int ilu ();
	jednostka * czln(int i);
	string nazwa(int ktorego);
	void patrolujcie(float3 dokad);
	bool pilnujcie(int co);
	virtual bool przyjmijcie(int id, jednostka *ktoToJest);
	virtual void scalZOddzialem(oddzial * doDodania);
	void ucieczka (int dokad, int strona);
	virtual bool usuncie(int id, jednostka *ktoToJest);
	void idzDoPunktu (float3 gdzie);
	void idzDoSektora (int ktory);
};
class huty : public oddzial
{
public:
	int operator-=(jednostka * j);
	int moc;
	huty(){typ=4; metal=0;moc=0;};
	bool wlacz ();
	bool wylacz ();
	bool przyjmijcie(int id, jednostka *ktoToJest);
	bool usuncie(int id, jednostka *ktoToJest);
};
class budowlancy : public oddzial
{
public:
	friend bool operator==(const budowlancy & p, const budowlancy & o);
	int operator-=(jednostka * j);
	baza * mojaBaza;
	int poziom;
	int lider;
	bool odsysajcie(int co);
	bool naprawcie(int co);
	void scalZOddzialem(oddzial * doDodania);
	bool zbudujmy (float3 gdzie, string co, int odstep=0);
	bool umiecieBudowac (string co);
	bool liderZmarl ();
	void nowyLider ();
	bool przyjmijcie (int id, jednostka *ktoToJest);
	bool usuncie(int id, jednostka *ktoToJest);
	//budowlancy(IAICallback * callb, TTAICore* ttai);
	budowlancy(){typ=1; metal=0; lider=-1;};
	//
};
class gunshipy : public oddzial
{
public:
	gunshipy();
	float3 punktZborny;
};
class mordulce : public oddzial
{
public:
	bool przyjmijcie(int id, jednostka *ktoToJest);
	float3 punktZborny;
	bool wWalce;
	mordulce(){typ=3;};
	//
};
class obroncy : public oddzial
{

	//
};
class silosiki : public oddzial
{
public:
	//void scalZOddzialem(oddzial * doDodania);
	void naladuj (int iloma, int ile=-1);
	//
};
class zwiadowcy : public oddzial
{
public:
	zwiadowcy();
};


#endif // ODDZIAL